﻿#pragma once

#include "../MonsterObject.h"
#include "../../MirDatabase/MonsterInfo.h"
#include "../../../Shared/Enums.h"
#include "../../../Shared/Packet.h"
#include <vector>
#include <any>

using namespace Server::MirDatabase;
using namespace Server::MirEnvir;
namespace S = ServerPackets;

namespace Server::MirObjects::Monsters
{
    class GreatFoxSpirit : public MonsterObject
    {
    private:
        unsigned char _stage = 0;
        long long RecallTime = 0;
        unsigned char AttackRange = 7;

    protected:
        bool getCanMove() const override;

        GreatFoxSpirit(MonsterInfo *info);

        bool InAttackRange() override;

        void ProcessAI() override;


    public:
        void Turn(MirDirection dir) override;

        bool Walk(MirDirection dir) override;

    protected:
        void ProcessRoam() override;

        void ProcessTarget() override;

        void Attack() override;

        void CompleteAttack(std::vector<std::any> &data) override;

    public:
        void Die() override;

        void Spawned() override;

    private:
        void ChangeGuardianState(bool Active);

    public:
        Packet *GetInfo() override;
    };
}
